﻿using System;
using Csla;
using Csla.Data;
using Csla.Server;
using Utpl.Syllabus.Framework;
using Utpl.Syllabus.Framework.Csla.Base;

using DataPortal = Csla.DataPortal;
using System.Collections.Generic;

namespace Utpl.Syllabus.Reconocimiento.BL
{
    /// <summary>
    /// Estereotipo: EditableChildList
    /// Responsabilidad: Administrar los Componentes reconocidos
    /// Autor: Luis Cuenca Macas - Enovatraining. Cia. Ltda.
    /// Fecha: 14/12/2012 10:12:12 AM
    /// </summary>
    [Serializable]
    [ObjectFactory("Object=ReconocimientoEstados;Assembly=Utpl.Syllabus.Reconocimiento.BL")]
    public class ReconocimientoEstados : SyEditableChildListBase<ReconocimientoEstados, ReconocimientoEstado>
    {
        #region Bussines Methods
        /// <summary>
        /// Metodo que verifica si se puede o no agregar un nuevo requisito a la lista
        /// </summary>
        /// <param name="ReconocimientoEstado">ReconocimientoEstado</param>
        /// <returns>True o False</returns>
        public override bool CanAdd(ReconocimientoEstado ReconocimientoEstado)
        {
            if (!base.CanAdd(ReconocimientoEstado))
                return false;

            
            return true;
        }

        #endregion

        #region Factory Methods
        /*/// <summary>
        /// Permite crear una instancia de ReconocimientoEstados
        /// </summary>
        /// <returns>ReconocimientoEstados</returns>
        public static ReconocimientoEstados NewReconocimientoEstados()
        {
            return DataPortal.CreateChild<ReconocimientoEstados>();
        }
        /// <summary>
        /// Permite obtener una lista de ReconocimientoEstados
        /// </summary>
        /// <param name="padreId">Id del Programa Academico</param>
        /// <returns>ReconocimientoEstados</returns>
        internal static ReconocimientoEstados GetReconocimientoEstados(int padreId)
        {
            return DataPortal.Fetch<ReconocimientoEstados>(new SingleCriteria<ReconocimientoEstados, int>(padreId));
        }*/
        /// <summary>
        /// Constructor privado de ReconocimientoEstados
        /// </summary>
        public ReconocimientoEstados()
        { /* Require use of factory methods */ }

        #endregion
    }

    /// <summary>
    /// Estereotipo: EditableChild
    /// Responsabilidad: Componentes reconocidos
    /// Autor: Luis Cuenca Macas - Enovatraining. Cia. Ltda.
    /// Fecha: 14/12/2012 10:12:12 AM
    /// </summary>
    [Serializable]
    [ObjectFactory("Object=ReconocimientoEstado;Assembly=Utpl.Syllabus.Reconocimiento.BL")]
    public class ReconocimientoEstado : SyEditableChildBase<ReconocimientoEstado>, IVersionable
    {
        #region Business Methods

        #region < PROPIEDADES >

        public int Id { get; set; }

        // Nombre 
        private static PropertyInfo<string> NombreProperty = RegisterProperty<string>(o => o.Nombre, "Nombre");
        /// <summary>
        /// Nombre del estado
        /// </summary>
        public string Nombre
        {
            get { return GetProperty(NombreProperty); }
            set { SetProperty(NombreProperty, value); }
        }

        public int VersionRegistro { get; set; }
        #endregion

        #region < OPERACIONES >

        /// <summary>
        /// Método que permite validar si un objeto (other) es igual al actual
        /// </summary>
        /// <param name="other">Objeto a Comparar</param>
        /// <returns>True: si son objetos iguales</returns>
        public override bool Equals(ReconocimientoEstado other)
        {
            return Nombre == other.Nombre;
        }

        /// <summary>
        /// Método que permite obtener el identificador de un objeto
        /// </summary>
        /// <returns>retorna el identificador</returns>
        public override int GetHashCode()
        {
            return Id;
        }

        #endregion

        #endregion

        #region Factory Methods
       /* /// <summary>
        /// Permite crear una instancia de ReconocimientoEstado
        /// </summary>
        /// <returns>ReconocimientoEstado</returns>
        public static ReconocimientoEstado NewReconocimientoEstado()
        {
            return DataPortal.Create<ReconocimientoEstado>();
        }
        /// <summary>
        /// Permite obtener un ReconocimientoEstado
        /// </summary>
        /// <param name="sdr">Data</param>
        /// <returns>ReconocimientoEstado</returns>
        internal static ReconocimientoEstado GetReconocimientoEstado(SafeDataReader sdr)
        {
            return DataPortal.FetchChild<ReconocimientoEstado>(sdr);
        }*/
        /// <summary>
        /// Constructor privado de ReconocimientoEstado
        /// </summary>
        public ReconocimientoEstado()
        { /* Require use of factory methods */ }

        #endregion

    }
}